查看原文
其他

支持ARKit 2的Unity ARKit插件新功能介绍

Unity Unity官方平台 2018-11-16

前不久Apple在WWDC18为AR开发者宣布了一些激动人心的消息,其中包括ARKit 2。如今Unity已和Apple紧密合作,通过更新Unity ARKit 插件让我们的开发者即时访问这些全新功能。

 

在本文中,我们会介绍ARKit 2新功能的技术细节,告诉你如何通过Unity ARKit 插件使用这些功能。


请访问Bitbucket下载支持ARKit 2的Unity ARKit 插件:

https://bitbucket.org/Unity-Technologies/unity-arkit-plugin/src/arkit2.0_beta/


ARWorldMap

ARWorldMap是ARKit 2中一个非常实用的新功能,它能够实现持续性AR体验和共享式多人AR体验。

 

请在Unity ARKit插件目录下查看示例:Examples/ARKit2.0/UnityARWorldMap/UnityARWorldMap.unity

 

每个会话都会随着操作者四处移动并检测更多特征点时构建一个ARWorldMap。你可以通过C#从一个会话中获取当前ARWorldMap,将它保存到你的Application.persisentDataPath中。

 

你也可以在保存的位置载入一个已保存的ARWorldMap。这样即使你离开会话后再回来,虚拟对象仍会在相同的坐标空间出现。

 

ARWorldMap可以被序列化为一个字节数组,并使用WiFi、蓝牙或其它分享方式发送到另一个设备上。另一方面,它也能被反序列化,用来将其它设备重定位到与第一个设备相同的世界坐标映射,从而得到共享的多人游戏体验。

 

当拥有ARWorldMap后,不管是通过载入得到、还是从内存中获取、亦或是从其它设备接收,你的设备都能将其设为配置中的一个参数,然后使用该配置重置ARSession,从而共享坐标系统信息。

 

这样做会重置会话,并且随着你四处移动,应用会尝试将ARWorldMap中的特征点与你环境中所检测到的特征点相互匹配。当它们成功匹配后,会话将重定位你的设备坐标,将其与ARWorldMap中所保存的坐标匹配。

 

下面是一个更为完整的示例项目,名为SharedSpheres ,它使用了Unity的多人网络连线功能UNet来将ARWorldMap传输到另一设备,同步设备的坐标系统。


ARReferenceObject和ARObjectAnchor


类似于ARKit 1.5中用于图像识别的ARReferenceImage和ARImageAnchor,我们现在使用ARReferenceObject和ARObjectAnchor 来进行对象识别。


这是乐高团队在WWDC 18的主题演讲上重点展示的功能,它将用于识别乐高的真实玩具组,并通过将虚拟玩具组覆盖在真实玩具组上方来增强它的效果。


UnityARObjectAnchor示例

如何在Unity中使用UnityARObjectAnchor,请查看插件中的场景Examples/ARKit2.0/UnityARObjectAnchor/UnityARObjectAnchor.unity。

 

这个示例假设你已经拥有描述识别对象的.arobject文件。你可以从下方介绍的UnityObjectScanner示例创建.arobject文件,也可以通过Apple的ARKit Object Scanner应用来创建,这二种方式都会得到与工作流中使用的相同文件格式。

 

类似ARReferenceImage,我们也会设置一个ARReferenceObjectsSetAsset,它包含对ARReferenceObjectAssets的引用。然后我们会给ARSession中的配置添加一个对ARReferenceObjectsSetAsset的引用,这样它就能在会话期间尝试检测那个集合中的ARReferenceObjects。这一切都可以在Unity编辑器中完成。

 

无论何时识别出一个对象,都会创建一个ARObjectAnchor,就如其它锚点一样,你可以订阅一个事件,当锚点被添加、更新或移除时进行事件触发。

 

当事件被触发时,你可以决定接下来要做的事,例如在该位置创建预制件。


UnityObjectScanner示例

UnityObjectScanner是个更为完整的示例项目,它能使用一个边界对话框来进行对象的创建和对象检测。你可以在以下目录查看:

Examples/ARKit2.0/UnityARObjectScanner/UnityARObjectScanner.unity

  

你可以使用这个示例项目保存已扫描的.arobjects,然后使用iTunes文件分享功能将它们传输到你的Mac上。当你在Mac上得到这些文件后,你可以在把它们载入Unity项目前重命名这些文件。

 

这个示例项目有二个不同的模式:扫描模式和检测模式。对扫描模式而言,我们会使用ARKitObjectScanningSessionConfiguration,它会在场景中完成更为细致的探索,但它会使用更多的CPU和电量,所以在使用时应进行限制。

 

通过使用这个配置,你可以在扫描对象附近的平面上点击,产生一个红色方块覆盖对象。你也可以控制方块大小来让它只覆盖感兴趣目标。然后在方块周围扫描,从而尽可能多地在对象上获取特征点。然后你可以按下按钮创建一个ARReferenceObject。创建对象会保存到一个列表中。

 

 

按下Detect按钮会进入检测模式,它的工作方式类似上面的对象锚点示例,但是会使用一个方法动态地添加ARReferenceObjects到检测对象列表中。

 

按下Save按钮会保存所有已扫描对象到设备上的文件夹中。它会保存这些对象为.arobjects文件,你可以使用iTunes的文件分享功能将它们传输到你的Mac上。当你在Mac上得到这些文件后,你可以在将它们载入Unity项目前重命名这些文件。


AREnvironmentProbeAnchor

AREnvironmentProbeAnchor是一种新的锚点,能够自动生成,也可以由你指定要在哪里创建。这个锚点将基于ARKit视频帧和世界跟踪数据在其周围区域创建并更新反射环境地图。它还会使用一个机器学习算法来进行估算,得到未看到部分场景的环境纹理,这个功能基于一个包含大量场景的机器学习训练模型实现。

 

在Unity中使用AREnvironmentProbeAnchor,请查看目录:

Examples/ARKit2.0/UnityAREnvironmentTexture 

 

在会话配置中有一个全新参数,用来控制这个功能,拥有以下三种可选的模式:

  • UnityAREnvironmentTexturingNone

  • UnityAREnvironmentTexturingManual

  • UnityAREnvironmentTexturingAutomatic。

 

UnityAREnvironmentTexturingManual模式下,你必须自行创建AREnvironmentProbeAnchor,但ARKit会更新从环境中采集的纹理。

 

如果你使用UnityAREnvironmentTexturingAutomatic模式,ARKit将根据从会话和在空间中的移动情况推算的数据,在程序化生成的空间间隔中创建AREnvironmentProbeAnchors。

 

这些示例都会生成一个包含ReflectionProbe组件的预制件,并由在AREnvironmentProbeAnchor中得到的环境纹理更新它。这个ReflectionProbe现在会参与标准Unity渲染管线,它将增强任意使用该功能的游戏对象。


图像追踪

参考图像的工作方式和ARKit 1.5中的一样,但现在它不仅能识别图像,ARKit还能让你追踪它们:当你移动参考图像时,与图像相关联的ARImageAnchor 会与图像一起移动,所以你可以移动锚定在这些移动图像上的内容。

 

在会话配置中还有一个额外参数,它能让你通过声明会话中要同时追踪的图像数量来实现图像追踪。已有的示例已经进行更新,能够使用这个新功能。


面部追踪改进内容

ARKit 2还改进了iPhone X的面部追踪功能,带来一些全新功能。首先加入了一个额外的混合形状系数,名为TongueOut。它会根据ARKit 2面部追踪所感知到的舌头伸出距离,返回一个介于0.0和1.0之间的数值。在WWDC 18发布会上,Apple的动话表情展示了这个新功能,这个功能很受欢迎。

 

其它的改进内容还有凝视追踪功能。你会得到一个Transform,它将描述眼睛所朝的方向,还有正被观察对象的位置。

 

从示例中了解如何使用这个来自面部锚点的数据,请查看Examples/ARKit2.0/UnityTongueAndEyes/UnityTongueAndEyes.unity ,


下图将展示这个示例。


小结

请从Bitbucket 下载Unity ARKit插件的最新版本,尝试构建示例项目到你的iOS设备上。然后使用我们提供的这个简单易用的工具来创建精彩的AR体验, 享受创作的快乐!


更多Unity精彩内容尽在Unity官方中文论坛(Unitychina.cn) !


推荐阅读


官方活动

首期Unity官方在线培训课程

7月18日,Unity将正式举办首期Unity官方在线培训课程,打破地理位置的限制,通过在线一日系统化教学,帮助你掌握和使用Unity。参加完此次一天的在线课程后, 参会者将被授予Unity官方培训证明。[了解详情

课程日期:7月18日 (星期三)

报名地址:

https://connect.unity.com/events/UnityTrainingWorkshop


2018年Unity技术路演-上海站报名开启

7月13日,Unity官方技术团队将在上海交通大学给广大开发者带来Unity 2018最权威的新功能讲解。活动免费,名额有限,赶紧报名吧! [了解详情

活动报名:

https://connect.unity.com/events/jishuluyanshanghaizhan


ChinaJoy 2018 | Made with Unity作品展示招募开启

在历年ChinaJoy Unity展位上,多元化的Made with Unity游戏及应用体验总是吸引人潮的亮点。今年我们将招募精品的Made with Unity作品展示。为优秀的开发团队提供最佳的作品展示机会。[招募详情

申请时间:截至到7月10日

申请表单:http://unity2018.mikecrm.com/yaX19dK


7月Asset Store资源商店促销 

7月,只需在Asset Store资源商店消费满30-199美元,最高可获得价值235美元的5款免费资源,参与活动,获得夏日精选资源包。

活动地址:

https://assetstore.unity.com/g/july-promo-activation-cn



点击“阅读原文”访问Unity官方中文论坛

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存